package cn.jji8.patternLogin.spigot.login;

import cn.jji8.patternLogin.spigot.data.Data;
import org.bukkit.entity.Player;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 处理玩家登录的类
 * */
public class PlayerLogin extends LoginMode{
    //密码错误达到此书需要等待时间
    public static int maxPasswordError = 5;
    //需要等待时间，单位秒
    public static int errorTime = 60;
    //记录玩家密码错误次数
    static Map<String,PlayerLogin.PasswordError> passwordErrorMap = new HashMap<>();
    /**
     * 记录玩家密码错误次数的类
     * */
    static class PasswordError{
        //错误次数
        int ErrorNumber = 0;
        //错误超过上线时间。
        long ErrorTiem = 0;
    }
    //玩家密码错误消息
    PasswordError passwordError;
    @SuppressWarnings("unused")
    public PlayerLogin(Player player) {
        super(player);
        passwordError = passwordErrorMap.get(player.getName());
        if(passwordError==null){
            passwordError = new PasswordError();
            passwordErrorMap.put(player.getName(),passwordError);
        }
        password = Data.getPassword(player.getName());
        LoginNews.longNews(player,"§a§l请在前方面板输入图像密码完成登录！");
    }
    final String password;
    /**
     * 玩家连接完成后调用此方法，其他实现类应该重写。
     * @param spotList 密码列表
     */
    @Override
    void complete(List<Choice> spotList) {
        if ((passwordError.ErrorTiem+(errorTime* 1000L))>System.currentTimeMillis()) {
            LoginNews.news(player,"§e你的密码错误次数过多，请"+(((passwordError.ErrorTiem+(errorTime* 1000L))-System.currentTimeMillis())/1000)+"秒后再试。",80);
            return;
        }
        if(choiceListToString(spotList).equals(password)){
            LoginNews.news(player,"§a登录成功！",80);
            LoginManager.setLogin(player);
        }else {
            passwordError.ErrorNumber++;
            if(passwordError.ErrorNumber>=maxPasswordError){
                passwordError.ErrorTiem = System.currentTimeMillis();
                LoginNews.news(player,"§d§l密码错误，请"+errorTime+"秒后再试。",80);
                return;
            }
            LoginNews.news(player,"§d§l密码错误,请再次输入。你还可以尝试"+(maxPasswordError-passwordError.ErrorNumber)+"次。",80);
        }
    }
}
